package vues;

import java.awt.Color;
import java.awt.Graphics;
import java.awt.GridLayout;
import java.awt.Image;
import java.io.File;

import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JMenuItem;
import javax.swing.JPanel;
import javax.swing.JPopupMenu;

import evenements.EcouterPopupMenu;
import evenements.EcouteurCarte;
import modele.entites.Bot;
import modele.entites.Feu;
import modele.entites.MapEntite;
import modele.map.Case;

public class PanelGrille extends JPanel{

	
	private static final long serialVersionUID = 1L;
	private IHM ihm;
	private JPopupMenu popupMenu;
	private JMenuItem addRobot, addFeu, supprimerRobot, supprimerFeu;
	private CasePanel caseClique;
	private Image backgroundImg;
	
	public void setCaseClique(CasePanel caseClique) {
		this.caseClique = caseClique;
	}
	public CasePanel getCaseClique() {
		return caseClique;
	}
	public PanelGrille(IHM ihm){
		this.ihm = ihm;
		this.setLayout(new GridLayout(10,10));
		this.initGrilleV2(); // Initialisation de la carte visuelle (fond vert etc)
	}
	
	public void initPopupMenu(int type) {
		popupMenu = new JPopupMenu();
		EcouterPopupMenu ecouteurMenu = new EcouterPopupMenu(ihm);
		switch(type){
		//case vide
		case 0:
			addRobot = new JMenuItem("Ajouter un robot");
			addRobot.addActionListener(ecouteurMenu);
			addFeu = new JMenuItem("Ajouter un feu");
			addFeu.addActionListener(ecouteurMenu);
			popupMenu.add(addRobot);
			popupMenu.add(addFeu);
			break;
		//case feu
		case 1:
			supprimerFeu = new JMenuItem("Supprimer le feu");
			supprimerFeu.addActionListener(ecouteurMenu);
			popupMenu.add(supprimerFeu);
			break;
		//case robot
		case 2:
			supprimerRobot = new JMenuItem("Supprimer le robot");
			supprimerRobot.addActionListener(ecouteurMenu);
			popupMenu.add(supprimerRobot);
			break;
		}
	}
	
	public JPopupMenu getPopupMenu() {
		return popupMenu;
	}
	
	public Image getBackgroundImg() {
		return backgroundImg;
	}
	public void setBackgroundImg(Image backgroundImg) {
		this.backgroundImg = backgroundImg;
	}
	public void initGrilleV2()
	{
		EcouteurCarte ecouteurCarte = new EcouteurCarte(ihm);
		this.removeAll();
		for (Case c : this.ihm.getHorloge().getSimulateur().getMap().getCases()){
			CasePanel cp = new CasePanel(c);
			cp.addMouseListener(ecouteurCarte);
			for(MapEntite m : this.ihm.getHorloge().getSimulateur().getMapEntites())
			{
				if(m.getCaseCourante().getX() == c.getX() && m.getCaseCourante().getY() == c.getY())
				{
					if(m instanceof Feu && !((Feu) m).isFeuEteint()){
						ImageIcon imgFeu;
						if(((Feu)m).isFeuEnExtinction()){
							imgFeu = new ImageIcon((new ImageIcon(getClass().getResource("fire_extinction.png")).getImage()).getScaledInstance(60, 60, java.awt.Image.SCALE_SMOOTH));
						}else{
							imgFeu = new ImageIcon((new ImageIcon(getClass().getResource("fire.png")).getImage()).getScaledInstance(60, 60, java.awt.Image.SCALE_SMOOTH));
						}
						imgFeu.setDescription("feu");
						cp.add(new JLabel(imgFeu));
					}
					else if (m instanceof Bot){
						ImageIcon imgRobot = new ImageIcon((new ImageIcon(getClass().getResource("robot-"+((Bot)m).getOrientationImage()+".png")).getImage()).getScaledInstance(60, 60, java.awt.Image.SCALE_SMOOTH));
						imgRobot.setDescription("robot");
						cp.add(new JLabel(imgRobot));
					}
				}
			}
			this.add(cp);
		}
	}
	
	public void initGrille(){
		EcouteurCarte ecouteurCarte = new EcouteurCarte(ihm);
		this.removeAll();
		for (int i = 0; i < 100; i++){
			JButton button = new JButton();
			Color light_green = new Color(149, 219, 123);
			button.setName(i%10+","+i/10);
			//button.setForeground(light_green);
			//button.setBackground(light_green);
			button.setOpaque(false);
			button.setBorderPainted(false);
			button.addMouseListener(ecouteurCarte);
			for(MapEntite m : this.ihm.getHorloge().getSimulateur().getMapEntites())
			{
				if(m.getCaseCourante().getX() == i%10 && m.getCaseCourante().getY() == i/10)
				{
					if(m instanceof Feu && !((Feu) m).isFeuEteint()){
						ImageIcon imgFeu;
						if(((Feu)m).isFeuEnExtinction()){
							imgFeu = new ImageIcon((new ImageIcon(getClass().getResource("fire_extinction.png")).getImage()).getScaledInstance(70, 70, java.awt.Image.SCALE_SMOOTH));
						}else{
							imgFeu = new ImageIcon((new ImageIcon(getClass().getResource("fire.png")).getImage()).getScaledInstance(70, 70, java.awt.Image.SCALE_SMOOTH));
						}
						imgFeu.setDescription("feu");
						button.setIcon(imgFeu);
					}
					else if (m instanceof Bot){
						ImageIcon imgRobot = new ImageIcon((new ImageIcon(getClass().getResource("robot-"+((Bot)m).getOrientationImage()+".png")).getImage()).getScaledInstance(70, 70, java.awt.Image.SCALE_SMOOTH));
						imgRobot.setDescription("robot");
						button.setIcon(imgRobot);
					}
				}
			}			
			this.add(button);

		}
	}
	
	@Override
	protected void paintComponent(Graphics g) {
		super.paintComponent(g);
		if (backgroundImg != null)
			g.drawImage(backgroundImg, 0, 0, this);
		
	}
}
